﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Tong;
using Tong.WorkXml;//对XML文件进行操作
public partial class Use_Use_Edit_flg : System.Web.UI.Page
{  
    /// <summary>
    /// 用户的id 
    /// </summary>
    string id;
    /// <summary>
    /// 
    /// 用户名
    /// </summary>
    string use;
    /// <summary>
    /// 数据操作通用类 实例 TextData
    /// </summary> 
    public TongUse TextData = new TongUse();

    /// <summary>
    /// 系统安装绝对路径
    /// </summary>
    public String Abs_Path = TongUse.SysPath;

    /// <summary>
    /// 显示网站菜单
    /// </summary>
    public string MenuListText;


    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
          //try
            //{
                id = Request.QueryString["id"].ToString();//得到修改用户的id
                use = Request.QueryString["use"].ToString();//得到修改用户的id
                Page.Title = "修改" + use + "的信息页面";//页面标题
               
                tt.InnerHtml="修改" + use + "的管理权限页面";//页面标题
                MenuListText = ShowTree(0);//显示网站菜单
              
          //  }
           // catch (NullReferenceException ex)
           // {
            //    TextData.Err(ex.Message);
//
           // }


        }
        else
        {
            try
            {
                id = Request.QueryString["id"].ToString();//得到修改用户的id
                use = Request.QueryString["use"].ToString();//得到修改用户的id
                Page.Title = "修改" + use + "的信息页面";//页面标题
                MenuListText = ShowTree(0);//显示网站菜单
                tt.InnerHtml = "修改" + use + "的管理权限页面";//页面标题
               //如果有提交事件的话 
                FlgSave(Request.Form["Useflg"].ToString(),int.Parse(id));//更新这个用户的权限

          }
            catch (NullReferenceException ex)
          {
            TextData.Err(ex.Message);

          }
        }

       

    }






    /// <summary>
    /// SelectXML 方法要输出的XML文本文件
    /// </summary>
    string TreeXmlText = "";
    int ii = 0;
    /// <summary>
    /// 返回菜单显示的HTML代码
    /// </summary>
    /// <param name="select">显示的展次</param>
    /// <returns></returns>
    public String ShowTree(int select)
    {
        string sql;
        int i = 0;

        sql = "Select * From TreeClass where followid=" + select + " order by id desc";
        DataTable MyDt = TextData.SqlataSet(sql).Tables[0];//创建DataTable MyDt

        for (i = 0; i < MyDt.Rows.Count; i++)//遁环记录集
        {
            if (select == 0)//如果只一有层的话
            {

                TreeXmlText += "<tr>\r  <td width='223' class='tdbg' style='height: 27px'>\r";

                if (ISFlgEntity(MyDt.Rows[i]["id"].ToString()))//看看有没有这个数据
                {
                    TreeXmlText += "<input name='Useflg' floid='" + select + "' type='checkbox' checked='ture' value='" + MyDt.Rows[i]["id"].ToString() + "'   onclick=\"MenuSelectFlg('" + MyDt.Rows[i]["id"].ToString() + "')\" />";
                }
                else
                {
                   TreeXmlText += "<input name='Useflg' floid='" + select + "' type='checkbox' value='" + MyDt.Rows[i]["id"].ToString() + "'   onclick=\"MenuSelectFlg('" + MyDt.Rows[i]["id"].ToString() + "')\" />";

                }
                TreeXmlText += " </td>\r" +
                  " <td width='787' class='tdbg' style='height: 27px'>\r" +

                     MyDt.Rows[i]["ClassName"].ToString() +
                  " </td>\r" +
                "</tr>\r";
            }
            else
            {
                TreeXmlText += "<tr>\r  <td width='223' class='tdbg' style='height: 27px'>\r";


                if (ISFlgEntity(MyDt.Rows[i]["id"].ToString()))//看看有没有这个数据
                {
                    TreeXmlText += "<input name='Useflg' floid='" + select + "' type='checkbox' checked='ture'  value='" + MyDt.Rows[i]["id"].ToString() + "'   onclick=\"if(this.checked == true){MenuSelectFlo('" + select + "')}\" />";
                }
                else
                {
                    TreeXmlText += "<input name='Useflg' floid='" + select + "' type='checkbox' value='" + MyDt.Rows[i]["id"].ToString() + "'   onclick=\"if(this.checked == true){MenuSelectFlo('" + select + "')}\" />";
                }
               


                      TreeXmlText += " </td>\r" +
                    " <td width='787' class='tdbg' style='height: 27px'>\r" +

                     TextData.EStr(ii, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;") + MyDt.Rows[i]["ClassName"].ToString() +
                   " </td>\r" +
                "</tr>\r";
            }
            ii = ii + 1;
            ShowTree(int.Parse(MyDt.Rows[i]["id"].ToString()));//调用自己显示菜单ＨＴＭＬ
            ii -= 1;

        }

        return TreeXmlText;
    }


    /// <summary>
    /// 保存页面数据 FlgSave() 用户权限
    /// </summary>
    /// <param name="FlgStr">用户权限的数组</param>
    /// <param name="id">要更新或加入权限的ID</param>
    protected void FlgSave(String FlgStr, int id)
    {
        OperateXmlByDataSet XmlDir = new OperateXmlByDataSet();
            if (FlgStr != "" && id != 0)
            {
                TextData.SqlDataSave("Update [Use] Set flg = '" + FlgStr + "' where  Use_id = " + id);//更新这个用户的数据权限
                if (OperateXmlByDataSet.WriteXml(ShowXml(), Server.MapPath("../menu/Menu_data/" + use + ".xml")))//写入用户权限的XML文件 如果写入成功返回True;
              {
                  TextData.ResonseAlert("更新"+use+"的权限成功");
                  TextData.Res.Response.Redirect("user_Show.aspx");//转到页面

              }

                  
            }

       
    }


    /// <summary>
    ///如果用户权限存在 返回bool值
    /// </summary>
    /// <param name="flg">用户显示时的权限ID</param>
    /// <returns>返回bool值</returns>
    protected  Boolean ISFlgEntity(String flg)
    {
        ///r
        ///返回值
        bool value = false;

        string DataFlg =null ;
        DataFlg = TextData.SqlataSet("select [flg] from [use] where Use_id = "+ id).Tables[0].Rows[0]["flg"].ToString();
        if (flg != "")
        {
            string[] ArrStr = DataFlg.Split(',');//以","拆分这个字符串 结果为数组
            for(int i = 0; i< ArrStr.Length;i++)//看看这个数组里有没有你要的那种权限ID 如要有返回 true 没有返回 false
            {
                if (ArrStr[i].ToString().Trim() == flg.Trim())//看看有没有这个权限
                {
                    value=  true;
                }
                
            }
        
        }
        else
        {
            value = false;
        }
       
        return value;

        
    }

    #region 显示树的XML文件 调用方法 ShowTree()

    /// <summary>
    /// SelectXML 方法要输出的XML文本文件 使用请
    /// </summary>
    string XmlText = "<?xml version='1.0' encoding='utf-8'?>\r<系统菜单>";


    /// <summary>
    /// 写XML层次函数
    /// </summary>
    /// <param name="parentId">参数parentId 递归从属 ID</param>
    /// <param name="layer">参数parentId 递归 层次ID 相当于XML文件的层次结构 </param>
    protected void SelectXML(int parentId, int layer)
    {
        int i_n = 0, j, cId = 0;
        string sNbsp = "";//输出的空格 \t 为TAB 

        //建立记录集  相当于ASP 中的rs 

        DataTable Myds = TextData.SqlParameStor("ShowTree", "@parentId=" + parentId).Tables[0];//调用存贮过程创建DataTalbe对象

        j = Myds.Rows.Count;// Myds.Rows.Count记录集中的记录数

        for (int i = 0; i <= (layer - 1); i++)//输入TAB 显示层次
        {
            sNbsp += "\t \t";
        }

        //XmlText += "<一级分类菜单 ";//输出XML



        for (int i = 0; i < j; i++)
        {

            cId = Int32.Parse(Myds.Rows[i]["id"].ToString());//得到现在行的索引值;相当于ASP rs("id")

            DataTable MyDt = TextData.SqlParameStor("ShowTreeId", "@idX=" + cId).Tables[0];//建立从属记录集

            if (MyDt.Rows.Count > 0)//看看有是不是不只一条记录
            {

                if (ISFlgEntity(cId.ToString()))
                {   
                    
                    //下面方法给URL编码了
                    // XmlText += sNbsp + cId + "<一级分类菜单 分类菜单名='" + MyDt.Rows[0]["ClassName"].ToString() + "' 显示url='~/" + TextData.CodeUrlText(MyDt.Rows[0]["URL"].ToString()) + "' Trang='main'>1\n";
                    XmlText += sNbsp + cId + "<一级分类菜单 分类菜单名='" + MyDt.Rows[0]["ClassName"].ToString() + "' 显示url='~/" + MyDt.Rows[0]["URL"].ToString().Replace("&","&amp;") + "' Trang='main'>1\n";

                }
               

            }
            else//如果只有一条记录
            {
                if (ISFlgEntity(cId.ToString()))
                {
                    //下面方法给URL编码了
                    //XmlText += sNbsp + cId + "<一级分类菜单 分类菜单名='" + Myds.Rows[0]["ClassName"].ToString() + "' 显示url='~/" + TextData.CodeUrlText(Myds.Rows[0]["URL"].ToString()) + "' Trang='main'>2\n";
                    XmlText += sNbsp + cId + "<一级分类菜单 分类菜单名='" + Myds.Rows[0]["ClassName"].ToString() + "' 显示url='~/" + Myds.Rows[0]["URL"].ToString().Replace("&", "&amp;") + "' Trang='main'>2\n";
                }
                
            }


            SelectXML(cId, (layer + 1));//调用函数本身执行递归
            if (ISFlgEntity(cId.ToString()))
            {
                XmlText += sNbsp + "</一级分类菜单>\n";
            }

        }






        // XmlText += "</一级分类菜单>\n"; 一定要删掉　不然ＸＭＬ文件无法显示
    }

    /// <summary>
    /// 返回XML字符
    /// </summary>
    public String ShowXml()
    {
        SelectXML(0, 0);
        XmlText += "</系统菜单>";
        return XmlText;
    }
    #endregion
}
